       IDENTIFICATION DIVISION.
       PROGRAM-ID. TP2.

       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SPECIAL-NAMES.
           DECIMAL-POINT IS COMMA.
       
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
       SELECT ARCH_ALQUILERES ASSIGN TO DISK
                              ORGANIZATION IS INDEXED
                              ACCESS MODE IS SEQUENTIAL
                              RECORD KEY IS CLAVE_ALQUILERES
                              FILE STATUS IS ESTADO_ALQUILERES.
       
       SELECT ARCH_CHOFERES   ASSIGN TO DISK
                              ORGANIZATION IS INDEXED
                              ACCESS MODE IS DYNAMIC
                              RECORD KEY IS CLAVE_CHOFERES
                              FILE STATUS IS ESTADO_CHOFERES.
      
       SELECT ARCH_RECHAZOS   ASSIGN TO DISK
                              ORGANIZATION IS INDEXED
                              ACCESS MODE IS RANDOM
                              RECORD KEY IS CLAVE_RECHAZOS
                              FILE STATUS IS ESTADO_RECHAZOS. 
       
       SELECT ARCH_ORDENAR    ASSIGN TO DISK
                              FILE STATUS IS ESTADO_ORDENAR.
      
       SELECT ARCH_LISTADO    ASSIGN TO DISK
                              ORGANIZATION IS LINE SEQUENTIAL
                              FILE STATUS IS ESTADO_LISTADO. 
           
       DATA DIVISION.
       FILE SECTION.
       FD ARCH_ALQUILERES     LABEL RECORD IS STANDARD
                              VALUE OF FILE-ID IS "..\ALQUILERES.DAT".
       01 REG_ALQUILERES.
           03 CLAVE_ALQUILERES.
               05 ALQ_PATENTE PIC X(6).
               05 ALQ_FECHA.
                   07 ALQ_FECHA_ANO PIC 9(4).
                   07 ALQ_FECHA_MES PIC 9(2).
                   07 ALQ_FECHA_DIA PIC 9(2).
           03 ALQ_TIPO_DOC PIC X.
           03 ALQ_NRO_DOC  PIC X(20).
           03 ALQ_IMPORTE  PIC 9(4)V99.
           03 ALQ_CHOFER PIC X(7).
           03 ALQ_ESTADO PIC X.
           
       FD ARCH_CHOFERES      LABEL RECORD IS STANDARD
                             VALUE OF FILE-ID IS "..\CHOFERES.DAT".
       01 REG_CHOREFES.
           03 CLAVE_CHOFERES.
               05 CHO_NRO_LEGAJO PIC X(7).
               05 CHO_DESDE_FECHA.
                   07 CHO_DESDE_FECHA_ANO PIC 9(4).
                   07 CHO_DESDE_FECHA_MES PIC 9(2).
                   07 CHO_DESDE_FECHA_DIA PIC 9(2).
           03 CHO_HASTA_FECHA.
               05 CHO_HASTA_FECHA_ANO PIC 9(4).
               05 CHO_HASTA_FECHA_MES PIC 9(2).
               05 CHO_HASTA_FECHA_DIA PIC 9(2).
           03 CHO_TURNO PIC X.  
       
       FD ARCH_RECHAZOS      LABEL RECORD IS STANDARD
                             VALUE OF FILE-ID IS "..\RECHAZOS.DAT".
       01 REG_RECHAZOS.
           03 CLAVE_RECHAZOS.
               05 RCH_PATENTE PIC X(6).
               05 RCH_FECHA.
                   07 RCH_FECHA_ANO PIC 9(4).
                   07 RCH_FECHA_MES PIC 9(2).
                   07 RCH_FECHA_DIA PIC 9(2).
           03 RCH_TIPO_DOC PIC X.
           03 RCH_NRO_DOC PIC X(20).
           03 RCH_IMPORTE PIC 9(4)V99.
           
       FD ARCH_LISTADO LABEL RECORD IS OMITTED
                       VALUE OF FILE-ID IS "..\LISTADO.TXT".
       01 LINEA_LISTADO   PIC X(80).
       
       SD ARCH_ORDENAR DATA RECORD IS REG_ORDENAR.
       01 REG_ORDENAR.
           03 CLAVE_ORDENAR.
               05 ORD_FECHA.
                   07 ORD_FECHA_ANO PIC 9(4).
                   07 ORD_FECHA_MES PIC 9(2).
                   07 ORD_FECHA_DIA PIC 9(2).
               05 ORD_LEGAJO_CHOFER PIC X(7).
               05 ORD_NUMERO_CLIENTE PIC X(8).
           03 ORD_TURNO_CHOFER PIC X.
           03 ORD_TIPO_DOC_CLIENTE PIC X.
           03 ORD_NRO_DOC_CLIENTE PIC X(20).
           03 ORD_DIRECCION_CLIENTE PIC X(30).
       
       WORKING-STORAGE SECTION.
      *VARIABLES DE FILE STATUS.
       01 ESTADO_ALQUILERES PIC XX.
           88  OK_ALQUILERES  VALUE '00'.
           88  NO_EXISTE_ALQUILERES VALUE '23'.
           88  EOF_ALQUILERES VALUE '10'.
       01 ESTADO_CHOFERES PIC XX.
           88  OK_CHOFERES  VALUE '00'.
           88  NO_EXISTE_CHOFERES VALUE '23'.
           88  EOF_CHOFERES VALUE '10'.
       01 ESTADO_RECHAZOS PIC XX.
           88  OK_RECHAZOS  VALUE '00'.
           88  NO_EXISTE_RECHAZOS VALUE '23'.
           88  EOF_RECHAZOS VALUE '10'.
       01 ESTADO_ORDENAR PIC XX.
           88  OK_ORDENAR  VALUE '00'.
           88  NO_EXISTE_ORDENAR VALUE '23'.
           88  EOF_ORDENAR VALUE '10'.
        01 ESTADO_LISTADO PIC XX.
           88  OK_LISTADO  VALUE '00'.
           88  NO_EXISTE_LISTADO VALUE '23'.
           88  EOF_LISTADO VALUE '10'.
      
      *VARIABLES.
       01 NUM_HOJA PIC 999 VALUE 0.
       01 CANT_LINEA PIC 999 VALUE 100.
       01 OK_CHOFER PIC XX VALUE 'NO'.
       01 TOT_GENERAL PIC 9999 VALUE 0.
       01 TOT_FECHA PIC 9999 VALUE 0.
       01 TOT_CHOFER PIC 9999 VALUE 0.
       01 WX-FECHA PIC 9(6).
       01 FECHA_ANT PIC 9(8).
       01 CHOFER_ANT PIC X(7).
       
      *VARIABLES DE SUBPROGRAMA.
       01 OPERACION PIC X.
	   01 DOCUMENTO PIC X(20).
       01 CODIGO_RETORNO PIC 9.
       01 REG_CLIENTES.
		  03 CLI_NUMERO PIC X(8).
		  03 CLI_FECHA_ALTA.
		      05 CLI_FECHA_ALTA_ANO PIC 9(4).
              05 CLI_FECHA_ALTA_MES PIC 9(2).
              05 CLI_FECHA_ALTA_DIA PIC 9(2).
		  03 CLI_TELEFONO PIC X(20).
		  03 CLI_DIRECCION PIC X(30).
		  03 CLI_DOCUMENTO PIC X(20).
       
      *VARIABLES DEL LISTADO. 
       01 LINEA_VACIA.
           03 FILLER PIC X(80) VALUE ALL ' '.
                   
       01 ENC_GRAL_LINEA1.
           03 FILLER        PIC X(7) VALUE 'FECHA: '.
           03 ENC_GRAL_FECHA_DIA PIC 99.
           03 FILLER        PIC X(1) VALUE '/'.
           03 ENC_GRAL_FECHA_MES PIC 99.
           03 FILLER        PIC X(1) VALUE '/'.
           03 FILLER        PIC X(2) VALUE '20'.
           03 ENC_GRAL_FECHA_ANO PIC 99.
           03 FILLER        PIC X(54) VALUE ALL ' '.
           03 FILLER        PIC X(6) VALUE 'HOJA: '.
           03 ENC_GRAL_NUM_HOJA  PIC 999.
       
       01 ENC_GRAL_LINEA2.
           03 FILLER PIC X(26) VALUE ALL ' '.
           03 FILLER PIC X(28) VALUE 'LISTADO ALQUILERES APROBADOS'.
           03 FILLER PIC X(26) VALUE ALL ' '.
       
       01 ENC_FECHA.
           03 FILLER        PIC X(7) VALUE 'FECHA: '.
           03 ENC_FECHA_DIA PIC 99.
           03 FILLER        PIC X(1) VALUE '/'.
           03 ENC_FECHA_MES PIC 99.
           03 FILLER        PIC X(1) VALUE '/'.
           03 ENC_FECHA_ANO PIC 9999.
           03 FILLER        PIC X(63) VALUE ALL ' '.
           
       01 ENC_CHOFER.
           03 FILLER PIC X(8) VALUE 'CHOFER: '.
           03 ENC_CHOFER_LEGAJO PIC X(7).
           03 FILLER PIC X(11) VALUE '    TURNO: '.
           03 ENC_CHOFER_TURNO PIC X.
           03 FILLER PIC X(53) VALUE ALL ' '.
           
       01 ENC_DETALLE_LINEA1.
           03 FILLER PIC X(5) VALUE ALL ' '.
           03 FILLER PIC X(7)  VALUE 'CLIENTE'.
           03 FILLER PIC X(4)   VALUE ALL ' '.
           03 FILLER PIC X(8)  VALUE 'TIPO DOC'.
           03 FILLER PIC X(4)   VALUE ALL ' '.
           03 FILLER PIC X(14) VALUE 'NRO. DOCUMENTO'.
           03 FILLER PIC X(17)   VALUE ALL ' '.
           03 FILLER PIC X(9)  VALUE 'DIRECCION'.
           03 FILLER PIC X(12)   VALUE ALL ' '.

       01 ENC_DETALLE_LINEA2.
           03 FILLER PIC X(80) VALUE ALL '-'.
       
       01 LINEA_DETALLE.
           03 FILLER PIC X(4) VALUE ALL ' '.
           03 DETALLE_CLIENTE PIC X(8).
           03 FILLER PIC X(7) VALUE ALL ' '.
           03 DETALLE_TIPO_DOC PIC X.
           03 FILLER PIC X(5) VALUE ALL ' '.
           03 DETALLE_NRO_DOC PIC X(20).
           03 FILLER PIC X(5) VALUE ALL ' '.
           03 DETALLE_DIRECCION PIC X(30).
       
       01 LINEA_TOT_CHOFER.
           03 FILLER PIC X(18) VALUE 'TOTALES POR CHOFER'.
           03 TOT_CHOFER_EDICION PIC ZZZ9.
           03 FILLER PIC X(58) VALUE ALL ' '.
       
       01 LINEA_TOT_FECHA.
           03 FILLER PIC X(18) VALUE 'TOTALES POR FECHA '.
           03 TOT_FECHA_EDICION PIC ZZZ9.
           03 FILLER PIC X(58) VALUE ALL ' '.
           
       01 LINEA_TOT_GRAL.
           03 FILLER PIC X(18) VALUE 'TOTALES GENERAL   '.
           03 TOT_GRAL_EDICION PIC ZZZ9.
           03 FILLER PIC X(58) VALUE ALL ' '.
       
       
       
       PROCEDURE DIVISION.
       SORT ARCH_ORDENAR ASCENDING KEY CLAVE_ORDENAR
       INPUT PROCEDURE IS ENTRADA
       OUTPUT PROCEDURE IS SALIDA
       STOP RUN.
       
       
       ENTRADA SECTION.
       PERFORM 1000_ABRIR_ARCHIVOS_ENTRADA.
       PERFORM 2000_LEO_ALQUILERES.
       PERFORM 3000_PROCESO_ALQUILERES UNTIL EOF_ALQUILERES.
       PERFORM 4000_CERRAR_ARCHIVOS_ENTRADA.
       
       RUTINAS_ENTRADA SECTION.
       1000_ABRIR_ARCHIVOS_ENTRADA.
       OPEN I-O ARCH_ALQUILERES.
       IF  NOT OK_ALQUILERES
               DISPLAY 'ERROR AL ABRIR EL ARCHIVO ALQUILERES'
               STOP RUN.
       OPEN INPUT ARCH_CHOFERES.
       IF  NOT OK_CHOFERES
               DISPLAY 'ERROR AL ABRIR EL ARCHIVO CHOFERES'
               STOP RUN.
       OPEN OUTPUT ARCH_RECHAZOS.
       IF  NOT OK_RECHAZOS
               DISPLAY 'ERROR AL ABRIR EL ARCHIVO RECHAZOS'
               STOP RUN.
       MOVE 'O' TO OPERACION.
       CALL 'SUB_CLIENTES' USING OPERACION, DOCUMENTO, CODIGO_RETORNO,
                               REG_CLIENTES.
       IF  CODIGO_RETORNO NOT = 0
               DISPLAY 'ERROR AL ABRIR EL ARCHIVO CLIENTES'
               STOP RUN.
               
       2000_LEO_ALQUILERES.
       READ ARCH_ALQUILERES RECORD.
       IF (NOT OK_ALQUILERES AND NOT EOF_ALQUILERES)
              DISPLAY 'ERROR AL LEER EL ARCHIVO AUTOS'
              STOP RUN.
              
       3000_PROCESO_ALQUILERES.
       IF ALQ_ESTADO = 'P'
           PERFORM 3100_ACTUALIZAR.
       PERFORM 2000_LEO_ALQUILERES.
       
       3100_ACTUALIZAR.
       PERFORM 3110_VERIFICO_CHOFER.
       IF OK_CHOFER = 'SI'
           PERFORM 3120_ACTUALIZO_TERMINADO.
       IF OK_CHOFER = 'NO'
           PERFORM 3130_ACTUALIZO_RECHAZADO.
       
       
       3110_VERIFICO_CHOFER.
       MOVE 'NO' TO OK_CHOFER.
       MOVE ALQ_CHOFER TO CHO_NRO_LEGAJO.
       MOVE 00000000 TO CHO_DESDE_FECHA.
       START ARCH_CHOFERES KEY IS > CLAVE_CHOFERES.
       IF OK_CHOFERES
           PERFORM 3111_LEO_CHOFERES.
       PERFORM 3112_VERIFICO_FECHA UNTIL ((EOF_CHOFERES) OR
                                   (NO_EXISTE_CHOFERES) OR
                                   (ALQ_CHOFER NOT = CHO_NRO_LEGAJO) OR
                                   (OK_CHOFER = 'SI')).
                                   
       3111_LEO_CHOFERES.
       READ ARCH_CHOFERES NEXT RECORD.
       IF (NOT OK_CHOFERES AND NOT EOF_CHOFERES)
              DISPLAY 'ERROR AL LEER EL ARCHIVO CHOFERES'
              STOP RUN.
              
       3112_VERIFICO_FECHA.
       IF ((ALQ_FECHA >= CHO_DESDE_FECHA) AND 
           (ALQ_FECHA <= CHO_HASTA_FECHA))
               MOVE 'SI' TO OK_CHOFER
       ELSE PERFORM 3111_LEO_CHOFERES.
       
       3120_ACTUALIZO_TERMINADO.
       MOVE 'T' TO ALQ_ESTADO.
       REWRITE REG_ALQUILERES.
       IF NOT OK_ALQUILERES 
              DISPLAY 'ERROR AL ACTUALIZAR ALQUILERES'
              STOP RUN.
       MOVE 'R' TO OPERACION.
       MOVE ALQ_NRO_DOC TO DOCUMENTO.
       CALL 'SUB_CLIENTES' USING OPERACION, DOCUMENTO, CODIGO_RETORNO,
                                 REG_CLIENTES.
       IF CODIGO_RETORNO = 1
           DISPLAY 'ERROR AL LEER EL ARCHIVO CLIENTES'
           STOP RUN.
       MOVE ALQ_FECHA TO ORD_FECHA.
       MOVE ALQ_CHOFER TO ORD_LEGAJO_CHOFER.
       MOVE CLI_NUMERO TO ORD_NUMERO_CLIENTE.
       MOVE CHO_TURNO TO ORD_TURNO_CHOFER.
       MOVE ALQ_TIPO_DOC TO ORD_TIPO_DOC_CLIENTE. 
       MOVE ALQ_NRO_DOC TO ORD_NRO_DOC_CLIENTE.                         
       MOVE CLI_DIRECCION TO ORD_DIRECCION_CLIENTE.
       RELEASE REG_ORDENAR.
              
       3130_ACTUALIZO_RECHAZADO.
       MOVE 'R' TO ALQ_ESTADO.
       REWRITE REG_ALQUILERES.
       IF NOT OK_ALQUILERES 
              DISPLAY 'ERROR AL ACTUALIZAR ALQUILERES'
              STOP RUN.
       MOVE ALQ_PATENTE TO RCH_PATENTE.
       MOVE ALQ_FECHA TO RCH_FECHA.
       MOVE ALQ_TIPO_DOC TO RCH_TIPO_DOC.
       MOVE ALQ_NRO_DOC TO RCH_NRO_DOC.
       MOVE ALQ_IMPORTE TO RCH_IMPORTE.
       WRITE REG_RECHAZOS.
       
       4000_CERRAR_ARCHIVOS_ENTRADA.
       CLOSE ARCH_ALQUILERES.
       CLOSE ARCH_CHOFERES.
       CLOSE ARCH_RECHAZOS.
       MOVE 'C' TO OPERACION.
       CALL 'SUB_CLIENTES' USING OPERACION, DOCUMENTO, CODIGO_RETORNO,
                               REG_CLIENTES.
       
       SALIDA SECTION.
       PERFORM 5000_ABRIR_ARCHIVOS_SALIDA.
       PERFORM 6000_LEER_SORT.
       PERFORM 7000_PROCESO UNTIL EOF_ORDENAR.
       PERFORM 9000_IMPRIMO_TOT_GRAL.
       PERFORM 8000_CERRAR_ARCHIVOS_SALIDA.
       
       RUTINAS_SALIDA SECTION.
       5000_ABRIR_ARCHIVOS_SALIDA.
       OPEN OUTPUT ARCH_LISTADO.
       IF  NOT OK_LISTADO
               DISPLAY 'ERROR AL ABRIR EL ARCHIVO LISTADO'
               STOP RUN.
               
       6000_LEER_SORT.
       RETURN ARCH_ORDENAR RECORD AT END MOVE '10' TO ESTADO_ORDENAR.
       IF (NOT OK_ORDENAR AND NOT EOF_ORDENAR)
              DISPLAY 'ERROR AL LEER EL ARCHIVO SORT'
              STOP RUN.
       
       7000_PROCESO.
       MOVE 0 TO TOT_FECHA.
       MOVE ORD_FECHA TO FECHA_ANT.
       IF (CANT_LINEA >= 60) PERFORM 10000_SALTO_PAGINA.
       PERFORM 9004_IMPRIMIR_ENC_GENERAL.
       PERFORM 9005_IMPRIMIR_ENC_FECHA.
       PERFORM 7100_MISMA_FECHA UNTIL ((EOF_ORDENAR) OR 
                                      (FECHA_ANT NOT = ORD_FECHA)).
       PERFORM 9002_IMPRIMO_TOT_FECHA.
       MOVE 100 TO CANT_LINEA.
       ADD TOT_FECHA TO TOT_GENERAL.
       
       7100_MISMA_FECHA.
       MOVE ORD_LEGAJO_CHOFER TO CHOFER_ANT.
       MOVE 0 TO TOT_CHOFER.
       IF CANT_LINEA >= 60
           PERFORM 10000_SALTO_PAGINA
           PERFORM 9004_IMPRIMIR_ENC_GENERAL
           PERFORM 9005_IMPRIMIR_ENC_FECHA.
       PERFORM 9006_IMPRIMIR_ENC_CHOFER.
       PERFORM 9003_IMPRIMO_ENC_DETALLE.
       PERFORM 7110_MISMO_CHOFER UNTIL ((EOF_ORDENAR) OR 
                                 (FECHA_ANT NOT = ORD_FECHA) OR
                                 (CHOFER_ANT NOT = ORD_LEGAJO_CHOFER)).
       PERFORM 9001_IMPRIMO_TOT_CHOFER.
       ADD TOT_CHOFER TO TOT_FECHA.
       
       7110_MISMO_CHOFER.
       IF CANT_LINEA >= 60
           PERFORM 10000_SALTO_PAGINA
           PERFORM 9004_IMPRIMIR_ENC_GENERAL
           PERFORM 9005_IMPRIMIR_ENC_FECHA
           PERFORM 9006_IMPRIMIR_ENC_CHOFER
           PERFORM 9003_IMPRIMO_ENC_DETALLE.
       PERFORM 9007_IMPRIMIR_DETALLE.
       ADD 1 TO TOT_CHOFER.
       PERFORM 6000_LEER_SORT.
           
       
       8000_CERRAR_ARCHIVOS_SALIDA.
       CLOSE ARCH_LISTADO.
       
      *TODOS LOS PROCESO DE IMPRIMIR.
       9000_IMPRIMO_TOT_GRAL.
       MOVE TOT_GENERAL TO TOT_GRAL_EDICION.
       WRITE LINEA_LISTADO FROM LINEA_TOT_GRAL.
       ADD 1 TO CANT_LINEA.
       
       9001_IMPRIMO_TOT_CHOFER.
       MOVE TOT_CHOFER TO TOT_CHOFER_EDICION.
       WRITE LINEA_LISTADO FROM LINEA_TOT_CHOFER.
       ADD 1 TO CANT_LINEA.
       
       9002_IMPRIMO_TOT_FECHA.
       MOVE TOT_FECHA TO TOT_FECHA_EDICION.
       WRITE LINEA_LISTADO FROM LINEA_TOT_FECHA.
       ADD 1 TO CANT_LINEA.
       
       9003_IMPRIMO_ENC_DETALLE.
       WRITE LINEA_LISTADO FROM ENC_DETALLE_LINEA1.
       WRITE LINEA_LISTADO FROM ENC_DETALLE_LINEA2.
       ADD 2 TO CANT_LINEA.
       
       9004_IMPRIMIR_ENC_GENERAL.
       ACCEPT WX-FECHA FROM DATE.
       MOVE  WX-FECHA(1:2) TO ENC_GRAL_FECHA_ANO.
       MOVE  WX-FECHA(3:2) TO ENC_GRAL_FECHA_MES.
       MOVE  WX-FECHA(5:2) TO ENC_GRAL_FECHA_DIA
       MOVE NUM_HOJA TO ENC_GRAL_NUM_HOJA.
       WRITE LINEA_LISTADO FROM ENC_GRAL_LINEA1.
       WRITE LINEA_LISTADO FROM ENC_GRAL_LINEA2.
       WRITE LINEA_LISTADO FROM LINEA_VACIA.
       ADD 3 TO CANT_LINEA.
       
       9005_IMPRIMIR_ENC_FECHA.
       MOVE ORD_FECHA_DIA TO ENC_FECHA_DIA.
       MOVE ORD_FECHA_MES TO ENC_FECHA_MES.
       MOVE ORD_FECHA_ANO TO ENC_FECHA_ANO.
       WRITE LINEA_LISTADO FROM ENC_FECHA.
       ADD 1 TO CANT_LINEA.
       
       9006_IMPRIMIR_ENC_CHOFER.
       MOVE ORD_LEGAJO_CHOFER TO ENC_CHOFER_LEGAJO.
       MOVE ORD_TURNO_CHOFER TO ENC_CHOFER_TURNO.
       WRITE LINEA_LISTADO FROM ENC_CHOFER.
       WRITE LINEA_LISTADO FROM LINEA_VACIA.
       ADD 2 TO CANT_LINEA.
       
       9007_IMPRIMIR_DETALLE.
       MOVE ORD_NUMERO_CLIENTE TO DETALLE_CLIENTE.
       MOVE ORD_TIPO_DOC_CLIENTE TO DETALLE_TIPO_DOC.
       MOVE ORD_NRO_DOC_CLIENTE TO DETALLE_NRO_DOC.
       MOVE ORD_DIRECCION_CLIENTE TO DETALLE_DIRECCION.
       WRITE LINEA_LISTADO FROM LINEA_DETALLE.
       ADD 1 TO CANT_LINEA.
       
       10000_SALTO_PAGINA.
       IF NUM_HOJA NOT = 0
           WRITE LINEA_LISTADO FROM LINEA_VACIA
           WRITE LINEA_LISTADO FROM LINEA_VACIA
           WRITE LINEA_LISTADO FROM LINEA_VACIA
           WRITE LINEA_LISTADO FROM LINEA_VACIA
           WRITE LINEA_LISTADO FROM LINEA_VACIA.
       MOVE 0 TO CANT_LINEA.
       ADD 1 TO NUM_HOJA.
           
       end program TP2.